Información general
Descripción
Norma para el diseño, construcción y ejecución de nuevas aplicaciones y nuevos sistemas de información preparados para desplegarse en la Nube Corporativa de la Junta de Andalucía, bajo un enfoque cloud-native.
Su objetivo es asegurar que las soluciones se puedan desplegar, escalar, operar y mantener de forma segura, portable y desacoplada en entornos de nube híbrida.
Ámbito de aplicación de la norma
La Junta de Andalucía tiene como objetivo estratégico el despliegue de sus sistemas bajo un modelo de ejecución en nube híbrida, denominada Nube Corporativa de la Junta de Andalucía (NCJA), que proporcionará una infraestructura segura y escalable para maximizar los beneficios del modelo en nube: escalabilidad, flexibilidad y menores costes.
Por lo tanto, para facilitar el despliegue en nube, a todos los desarrollos de nuevas aplicaciones y nuevos sistemas de información que se creen en la Agencia Digital de Andalucía, se le debe exigir las siguientes normas generales Cloud-Native.
Diseño
Código fuente
DIR_01 Gestión del código fuente
OBLIGATORIO El sistema deberá gestionar su código fuente mediante mecanismos que permitan controlar los cambios y etiquetar versiones completas.
DIR_02 Relación entre código base y componente
OBLIGATORIO Cada sistema o componente deberá tener una relación unívoca con su base de código.
Cada entidad desplegable o reutilizable, como una librería, un componente web o un servicio, deberá disponer de su propio repositorio y evolucionar de forma independiente.
DIR_03 Generación de un único proceso ejecutable
OBLIGATORIO Cada entidad desplegable deberá generar un único proceso ejecutable.
Esto facilita la escalabilidad, la portabilidad, la monitorización y el desacoplamiento entre componentes.
Dependencias
DIR_04 Declaración explícita de dependencias
OBLIGATORIO No se permitirán dependencias implícitas sobre librerías o componentes del sistema operativo.
Todas las dependencias deberán declararse de forma explícita en el manifiesto o descriptor correspondiente al gestor de dependencias utilizado.
DIR_05 Uso exclusivo de dependencias necesarias
OBLIGATORIO La solución deberá incluir únicamente las dependencias necesarias para su funcionamiento.
Deberán eliminarse dependencias no utilizadas, innecesarias, obsoletas o con versiones incompatibles.
DIR_06 Aislamiento de dependencias en ejecución
OBLIGATORIO Las dependencias deberán estar aisladas en tiempo de ejecución para evitar efectos no controlados sobre otros componentes del sistema.
El aislamiento podrá realizarse mediante instalación local, herramientas específicas de aislamiento o contenedores.
DIR_07 Independencia de herramientas instaladas en el sistema operativo
OBLIGATORIO La aplicación no deberá depender de herramientas instaladas previamente en el sistema operativo del entorno de ejecución.
Configuración
DIR_08 Inmutabilidad de los artefactos
OBLIGATORIO Los artefactos que se despliegan deben ser inmutables e independientes del entorno. No se permitirá la entrega de artefactos cuyo binario cambie según el entorno de despliegue.
DIR_09 Externalización de la configuración
OBLIGATORIO Los artefactos no deberán contener configuración dependiente del entorno.
La configuración deberá inyectarse antes de la ejecución o durante el arranque de la aplicación. Se permitirá incluir configuración dentro del artefacto siempre que se garantice la inmutabilidad del binario en los diferentes entornos.
DIR_10 Separación entre configuración y código
OBLIGATORIO Los valores que puedan variar entre entornos deberán almacenarse fuera del código fuente y fuera del artefacto desplegable.
Entre estos valores se incluyen, al menos:
- URL de recursos.
- Credenciales.
- Nombres de servicios.
- Parámetros específicos de entorno.
- Certificados o archivos de configuración.
DIR_11 Mecanismos permitidos de configuración
RECOMENDADO La configuración podrá proporcionarse mediante alguno de los siguientes mecanismos:
- Variables de entorno.
- Volúmenes externos.
- Herramientas de configuración centralizada o dinámica.
- Servicios de configuración compatibles con la arquitectura de la solución.
- Perfilados de aplicaciones siempre que se garantice que el paquete entregado es el mismo para todos los entornos
Backing services
DIR_12 Tratamiento homogéneo de servicios externos
OBLIGATORIO Los recursos consumidos por la aplicación a través de la red deberán tratarse de forma homogénea, sin diferenciar en el diseño si son locales, corporativos o de terceros.
Se consideran backing services, entre otros:
- Bases de datos.
- Sistemas de mensajería.
- Colas.
- Servicios SMTP.
- Sistemas de caché.
- Servicios externos consumidos mediante red.
DIR_13 Acceso a recursos mediante localizador y credenciales
OBLIGATORIO El acceso a los recursos externos deberá realizarse mediante un localizador, como una URL o mecanismo equivalente, y las credenciales necesarias cuando aplique.
Esta información deberá gestionarse como configuración externa y no deberá incluirse en el código fuente.
DIR_14 Persistencia de ficheros fuera del sistema local
OBLIGATORIO La aplicación no deberá utilizar el sistema de archivos local como mecanismo de persistencia.
Cuando sea necesario persistir información en ficheros, se deberán usar recursos externos, como volúmenes acoplables, almacenamiento distribuido o servicios compatibles con la tecnología utilizada.
DIR_15 Integración con otros sistemas mediante APIs
OBLIGATORIO La integración con otros sistemas deberá realizarse mediante APIs.
No se permitirá la integración basada en acceso directo a bases de datos, intercambio directo de ficheros compartidos u otros mecanismos que acoplen internamente los sistemas.
Construcción
Ciclo de vida del software
DIR_16 Separación entre construcción, distribución y ejecución
OBLIGATORIO El ciclo de vida del software deberá separar claramente las fases de construcción, distribución y ejecución.
La construcción generará el artefacto ejecutable a partir del código fuente y sus dependencias.
La distribución combinará el artefacto construido con la configuración del despliegue.
La ejecución arrancará los procesos correspondientes en el entorno de destino.
Servicios autocontenidos
DIR_17 Servicios autocontenidos
OBLIGATORIO El sistema deberá ser autocontenido y no depender de un servidor web o servidor de aplicaciones externo ya existente para exponer servicios públicos.
Las aplicaciones deberán incluir los componentes necesarios para ejecutarse de forma autónoma en el entorno cloud-native.
Procesos
DIR_18 Procesos sin estado
OBLIGATORIO Los procesos deberán ser sin estado y no deberán depender del resultado de peticiones anteriores.
Cualquier información que requiera persistencia deberá almacenarse en un backing service con estado, como una base de datos o sistema equivalente.
DIR_19 Prohibición de afinidad obligatoria entre sesión y proceso
OBLIGATORIO No deberán utilizarse sticky sessions ni mecanismos que obliguen a que una petición sea atendida por la misma instancia de proceso que atendió peticiones anteriores.
Cuando se necesite mantener información de sesión, deberá utilizarse almacenamiento externo, mecanismos de caché compartida o almacenamiento seguro en cliente, según proceda.
DIR_20 Diseño para concurrencia y escalado horizontal
OBLIGATORIO Las aplicaciones deberán diseñarse para poder dividirse en componentes ejecutables independientes y escalar mediante múltiples instancias.
DIR_21 Compatibilidad con múltiples réplicas
OBLIGATORIO No se permitirá el despliegue de aplicaciones que presenten errores o comportamientos inconsistentes al ejecutarse con dos o más réplicas.
El diseño deberá contemplar el acceso concurrente a recursos compartidos, sesiones, cachés y bases de datos.
Ejecución y operación
Desechabilidad
DIR_22 Procesos desechables
OBLIGATORIO Los procesos deberán poder iniciarse y finalizarse en cualquier momento sin comprometer la consistencia del sistema.
DIR_23 Reducción del tiempo de arranque
OBLIGATORIO Los procesos deberán minimizar su tiempo de arranque.
En soluciones basadas en contenedores, deberán seguirse las buenas prácticas vigentes para generar imágenes ligeras y eficientes.
DIR_24 Gestión ordenada de señales de finalización
OBLIGATORIO Los procesos deberán gestionar adecuadamente las señales de finalización.
Cuando un proceso reciba una señal de parada, deberá finalizar de forma ordenada, completar o devolver el trabajo pendiente y respetar los tiempos máximos definidos.
DIR_25 Preparación ante finalizaciones inesperadas
OBLIGATORIO Los procesos deberán estar preparados para interrupciones inesperadas.
La solución deberá adoptar las medidas necesarias según el impacto funcional o técnico de una interrupción.
Igualdad entre desarrollo y producción
DIR_26 Equivalencia entre entornos
RECOMENDADO Los entornos de desarrollo y producción deberán ser lo más equivalentes posible.
Se deberán utilizar herramientas, tecnologías y procesos de despliegue similares para reducir riesgos en fases posteriores.
DIR_27 Pruebas automatizadas
RECOMENDADO Se deberán utilizar pruebas automatizadas para validar la calidad del código y reducir diferencias entre entornos.
DIR_28 Coherencia tecnológica entre desarrollo y producción
RECOMENDADO Durante el desarrollo se deberán utilizar tecnologías equivalentes a las previstas en producción.
Por ejemplo, no se debería desarrollar contra una base de datos diferente a la prevista en producción si dicha diferencia puede alterar el comportamiento de la aplicación.
Logs
DIR_29 Escritura de logs en salida estándar
OBLIGATORIO Los logs deberán escribirse en la salida estándar o en la salida estándar de error.
La recolección, agregación y explotación de los logs deberá delegarse en los mecanismos de observabilidad y recolección del entorno.
DIR_30 Normalización del formato de logs
OBLIGATORIO Los mensajes de log deberán tener un formato normalizado que facilite su análisis, búsqueda y explotación.
El formato recomendado será:
YYYY-MM-DD | HH:mm:ss.SSS | LOGLEVEL | ApplicationName | Message
Donde:
- YYYY-MM-DD HH:mm:ss.SSS: fecha y hora de generación del evento.
- LOGLEVEL: nivel del mensaje.
- ApplicationName: nombre del sistema o componente.
- Message: descripción suficiente para diagnosticar la situación o conocer la acción realizada.
DIR_31 Niveles de log
OBLIGATORIO Los niveles de log deberán utilizarse de forma coherente:
- ERROR: errores que afectan al funcionamiento, aunque la aplicación pueda continuar.
- WARN: situaciones anómalas que no impiden el funcionamiento.
- INFO: información relevante de ejecución.
- DEBUG: información para depuración, no activa en producción salvo causa justificada.
- TRACE: información de máximo detalle para diagnóstico.
Procesos de administración o mantenimiento
DIR_32 Ejecución de tareas administrativas como procesos de una sola ejecución
OBLIGATORIO Las tareas de administración o mantenimiento deberán ejecutarse como procesos de una sola ejecución.
Se incluyen, entre otros:
- Migraciones de base de datos.
- Consolas o procesos de inspección.
- Scripts de mantenimiento.
- Correcciones puntuales de datos.
DIR_33 Ejecución en entorno equivalente a producción
OBLIGATORIO Los procesos de administración y mantenimiento deberán ejecutarse desde un entorno equivalente al de producción.
DIR_34 Asociación a una distribución concreta
OBLIGATORIO Los procesos de administración y mantenimiento deberán asociarse a una distribución concreta de la aplicación.
Deberán utilizar el mismo código, la misma configuración y el mismo modelo de gestión que el resto de procesos de esa distribución.
Versiones
Versión actual: v01r00
- Fecha de aprobación: 10/03/2023.